{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load dependencies"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.0.0-alpha0\n",
      "GPU Available:  True\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from pathlib import Path\n",
    "import glob\n",
    "import pickle\n",
    "import json\n",
    "import matplotlib.pyplot as plt\n",
    "from lstm import LSTM_Simple\n",
    "from metrics import exact_match_metric, exact_match_metric_index\n",
    "from callbacks import NValidationSetsCallback, GradientLogger\n",
    "from generator import DataGenerator, DataGeneratorSeq\n",
    "from tqdm import tqdm\n",
    "from evaluate_lstm import LSTM_Evaluator\n",
    "\n",
    "import sys\n",
    "sys.path.append('../../')\n",
    "from src.models.attention import LSTMWithAttention\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "import tensorflow as tf\n",
    "from tensorflow.keras.optimizers import Adam\n",
    "print(tf.__version__)\n",
    "print(\"GPU Available: \", tf.test.is_gpu_available())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Helper Function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_two_results(result_1, result_2=None, experiments=['L&L'], title=''):\n",
    "    labels = []\n",
    "    array_1 = []\n",
    "    array_2 = []\n",
    "    \n",
    "    for module in result_1:\n",
    "        labels.append(module.split('__')[1])\n",
    "        array_1.append(result_1[module])\n",
    "\n",
    "    if result_2 is not None:\n",
    "        for module in result_1:\n",
    "            array_2.append(result_2[module])\n",
    "\n",
    "    x = np.arange(len(labels))  # the label locations\n",
    "    width = 0.35  # the width of the bars\n",
    "\n",
    "    fig, ax = plt.subplots()\n",
    "    if result_2 is not None:\n",
    "        rects1 = ax.bar(x - width/2, array_1, width, label=experiments[0])\n",
    "        rects2 = ax.bar(x + width/2, array_2, width, label=experiments[1])\n",
    "    else:\n",
    "        rects1 = ax.bar(x, array_1, width, label=experiments[0])\n",
    "\n",
    "\n",
    "    # Add some text for labels, title and custom x-axis tick labels, etc.\n",
    "    ax.set_ylabel('Scores')\n",
    "    ax.set_title('Evaluation scores: ' + title)\n",
    "    ax.set_xticks(x)\n",
    "    ax.set_xticklabels(labels, rotation=30, ha=\"right\")\n",
    "    ax.legend()\n",
    "\n",
    "\n",
    "    def autolabel(rects):\n",
    "        \"\"\"Attach a text label above each bar in *rects*, displaying its height.\"\"\"\n",
    "        for rect in rects:\n",
    "            height = rect.get_height()\n",
    "            ax.annotate('{0:.2f}'.format(height),\n",
    "                        xy=(rect.get_x() + rect.get_width() / 2, height),\n",
    "                        xytext=(0, 3),  # 3 points vertical offset\n",
    "                        textcoords=\"offset points\",\n",
    "                        ha='center', va='bottom')\n",
    "\n",
    "\n",
    "    if result_2 is not None:\n",
    "        autolabel(rects2)\n",
    "\n",
    "    autolabel(rects1)\n",
    "\n",
    "    fig.tight_layout()\n",
    "    plt.ylim([0, 1.1])\n",
    "    plt.legend(loc='lower right')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def concatenate_texts_individual(path, pattern):\n",
    "    file_paths = list(path.glob('{}*.txt'.format(pattern)))\n",
    "    \n",
    "    input_texts = {}\n",
    "    target_texts = {}\n",
    "\n",
    "    for file_path in file_paths:\n",
    "        if file_path.stem not in input_texts:\n",
    "            input_texts[file_path.stem] = []\n",
    "            target_texts[file_path.stem] = []\n",
    "        \n",
    "        with open(str(file_path), 'r', encoding='utf-8') as f:\n",
    "            lines = f.read().split('\\n')[:-1]\n",
    "\n",
    "        input_texts[file_path.stem].extend(lines[0::2])\n",
    "        target_texts[file_path.stem].extend(['\\t' + target_text + '\\n' for target_text in lines[1::2]])\n",
    "        \n",
    "    return input_texts, target_texts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_data(settings_path):\n",
    "    with open(str(settings_path), 'r') as file:\n",
    "        settings_dict = json.load(file)\n",
    "\n",
    "    raw_path = Path(settings_dict['data_path'])\n",
    "    interpolate_path = raw_path/'interpolate'\n",
    "    extrapolate_path = raw_path/'extrapolate'\n",
    "    train_easy_path = raw_path/'train-easy/'\n",
    "    \n",
    "    \n",
    "    math_module = settings_dict[\"math_module\"]\n",
    "    train_level = settings_dict[\"train_level\"]\n",
    "\n",
    "    datasets = {\n",
    "        'train':(raw_path, 'train-' + train_level + '/' + math_module),\n",
    "        'interpolate':(interpolate_path, math_module),\n",
    "        'extrapolate':(extrapolate_path, math_module)\n",
    "               }\n",
    "\n",
    "    input_texts = {}\n",
    "    target_texts = {}\n",
    "\n",
    "    for k, v in datasets.items():\n",
    "        input_texts[k], target_texts[k] = concatenate_texts_individual(v[0], v[1])\n",
    "    \n",
    "    return settings_dict, input_texts, target_texts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate_arithmetics_interpolate(lstm_eval, input_texts, target_texts, print_res=False):\n",
    "    test_set = 'interpolate'\n",
    "    results = {}\n",
    "\n",
    "    results_deepmind = {'arithmetic__add_or_sub': 0.875,\n",
    "                        'arithmetic__add_or_sub_in_base': 0.9,\n",
    "                        'arithmetic__add_sub_multiple': .95,\n",
    "                        'arithmetic__mul_div_multiple': .95,\n",
    "                        'arithmetic__nearest_integer_root': .875,\n",
    "                        'arithmetic__mul': 0.45,\n",
    "                        'arithmetic__div': 0.78,\n",
    "                        'arithmetic__simplify_surd':0.16,\n",
    "                        'arithmetic__mixed': 0.62}\n",
    "\n",
    "    for module in input_texts[test_set]:\n",
    "        metric = lstm_eval.evaluate_model(input_texts[test_set][module], target_texts[test_set][module])\n",
    "        if print_res:\n",
    "            print(test_set, module)\n",
    "            print('metric:', metric, '\\n')        \n",
    "        results[module] = metric\n",
    "\n",
    "    plot_two_results(results, results_deepmind, experiments=['L&L', 'DM'], title='interpolation')\n",
    "    \n",
    "    return results, results_deepmind"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate_arithmetics_extrapolate(lstm_eval, input_texts, target_texts, print_res=False):\n",
    "    test_set = 'extrapolate'\n",
    "    results = {}\n",
    "\n",
    "    results_deepmind = {'arithmetic__add_or_sub_big': 0.3,\n",
    "                        'arithmetic__add_sub_multiple_longer': 0.55,\n",
    "                        'arithmetic__mul_big': .225,\n",
    "                        'arithmetic__mixed_longer': 0.1,\n",
    "                        'arithmetic__mul_div_multiple_longer': 0.55,\n",
    "                        'arithmetic__div_big':0.625}\n",
    "\n",
    "    for module in input_texts[test_set]:\n",
    "        \n",
    "        metric = lstm_eval.evaluate_model(input_texts[test_set][module], target_texts[test_set][module])\n",
    "        if print_res:\n",
    "            print(test_set, module)\n",
    "            print('metric:', metric, '\\n')\n",
    "        results[module] = metric\n",
    "\n",
    "    plot_two_results(results, results_deepmind, experiments=['L&L', 'DM'], title='extrapolation')\n",
    "    return results, results_deepmind"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "class LSTMWithAttentionEvaluator:\n",
    "    \n",
    "    def __init__(self, path):\n",
    "        \n",
    "        with open(str(path/'settings.json'), 'r') as file:\n",
    "            self.settings_dict = json.load(file)\n",
    "\n",
    "        with open(str(path/'arithmetic-*.pkl'), 'rb') as file:\n",
    "            self.sequence_data = pickle.load(file) \n",
    "            self.token_index = self.sequence_data['input_token_index']\n",
    "\n",
    "        self.num_tokens = len(self.token_index)\n",
    "        \n",
    "        adam = Adam(lr=6e-4, beta_1=0.9, beta_2=0.995, epsilon=1e-9, decay=0.0, amsgrad=False, clipnorm=0.1)\n",
    "        self.lstm = LSTMWithAttention(sequence_data['num_encoder_tokens'], \n",
    "                         sequence_data['num_decoder_tokens'], \n",
    "                         sequence_data['max_encoder_seq_length'],\n",
    "                        sequence_data['max_decoder_seq_length'],\n",
    "                        settings_dict['num_encoder_units'],\n",
    "                        settings_dict['num_decoder_units'],\n",
    "                        settings_dict['embedding_dim'])\n",
    "        self.model = self.lstm.get_model()\n",
    "        self.model.load_weights(str(path/'model.h5'))\n",
    "        self.model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=[exact_match_metric_index])\n",
    "        \n",
    "    def evaluate_model(self, input_texts, output_texts, teacher_forcing=True, batch_size=128, n_samples=1000):\n",
    "        max_seq_length  = max([len(txt_in)+len(txt_out) for txt_in, txt_out in zip(input_texts,output_texts)])\n",
    "        \n",
    "        data_gen_pars = {\n",
    "            \"batch_size\": settings_dict[\"batch_size\"],\n",
    "            \"max_encoder_seq_length\": sequence_data['max_encoder_seq_length'],\n",
    "            \"max_decoder_seq_length\": sequence_data['max_decoder_seq_length'],\n",
    "            \"num_encoder_tokens\": sequence_data['num_encoder_tokens'],\n",
    "            \"num_decoder_tokens\": sequence_data['num_decoder_tokens'],\n",
    "            \"input_token_index\": sequence_data['input_token_index'],\n",
    "            \"target_token_index\": sequence_data['target_token_index'],\n",
    "            \"num_thinking_steps\": settings_dict[\"thinking_steps\"],\n",
    "        }\n",
    "        \n",
    "        self.data_generator = DataGeneratorAttention(input_texts=input_texts,\n",
    "                                               target_texts=output_texts,\n",
    "                                               **data_gen_pars)\n",
    "        \n",
    "        if not teacher_forcing:\n",
    "            outputs_true, outputs_preds = self.predict_without_teacher(n_samples, max_seq_length)\n",
    "            exact_match = len([0 for out_true, out_preds in zip(outputs_true, outputs_preds) if out_true.strip()==out_preds.strip()])/len(outputs_true)\n",
    "        \n",
    "        else:\n",
    "            result = self.model.evaluate_generator(self.data_generator, verbose=1)\n",
    "            exact_match = result[1]\n",
    "            \n",
    "        return exact_match\n",
    "    \n",
    "    def predict_on_string(self, text, max_output_length=100):\n",
    "        \n",
    "        max_seq_length = len(text) + max_output_length\n",
    "\n",
    "        \n",
    "        params = {'batch_size': 1,\n",
    "                  'max_seq_length': max_seq_length,\n",
    "                  'num_tokens': self.num_tokens,\n",
    "                  'token_index': self.token_index,\n",
    "                  'num_thinking_steps': self.settings_dict[\"thinking_steps\"]\n",
    "                 }\n",
    "        \n",
    "        \n",
    "        self.data_generator = DataGeneratorSeq(input_texts=[text],\n",
    "                                               target_texts=['0'*max_output_length],\n",
    "                                               **params)\n",
    "        \n",
    "        outputs_true, outputs_preds = self.predict_without_teacher(1, max_seq_length)\n",
    "        \n",
    "        return outputs_preds[0].strip()\n",
    "\n",
    "    def predict_without_teacher(self, n_samples, max_seq_length, random=True):\n",
    "        \n",
    "        encoded_texts = [] \n",
    "        outputs_true = []\n",
    "        if random:\n",
    "            samples = np.random.choice(self.data_generator.indexes, n_samples, replace=False)\n",
    "        else:\n",
    "            samples = list(range(n_samples))\n",
    "        for i in samples:\n",
    "            input_len = len(input_texts_train[i])\n",
    "            sample = self.data_generator._DataGeneratorSeq__data_generation([i])         \n",
    "            input_len = len(self.data_generator.input_texts[i])\n",
    "            outputs_true.append(self.data_generator.target_texts[i])\n",
    "            x = sample[0][0][:input_len+self.settings_dict[\"thinking_steps\"]+1]\n",
    "            encoded_texts.append(np.expand_dims(x, axis=0))\n",
    "            \n",
    "        outputs_preds = self.lstm.decode_sample(encoded_texts, self.token_index, max_seq_length)\n",
    "        return outputs_true, outputs_preds"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# job_ids = {1:'j4bu146wamlr9', 2: 'js0kldpwp1nhos', 3: 'jroi3ag4aros6'}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "job_ids = {1:'jsfd8uwubghbqg'}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 jsfd8uwubghbqg\n"
     ]
    }
   ],
   "source": [
    "for key, value in job_ids.items():\n",
    "    print(key, value)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_path = Path('../../../../storage/artifacts/'  + job_ids[1])\n",
    "settings_dict, input_texts, target_texts = get_data(model_path/'settings.json')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/notebooks/git/deep-math/notebooks/baselines\r\n"
     ]
    }
   ],
   "source": [
    "!pwd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ls: cannot access '../../../storage/artifacts/j4bu146wamlr9': No such file or directory\r\n"
     ]
    }
   ],
   "source": [
    "!ls {model_path}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "arithmetic-*.pkl  losses.png   model.h5       training_checkpoints\r\n",
      "callbacks.pkl\t  metrics.png  settings.json\r\n"
     ]
    }
   ],
   "source": [
    "!ls \"../../../../storage/artifacts/jsfd8uwubghbqg/\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['target_token_index', 'input_token_index', 'max_decoder_seq_length', 'num_encoder_tokens', 'target_texts', 'num_decoder_tokens', 'max_encoder_seq_length', 'input_texts', 'num_thinking_steps'])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with open(str(model_path/'arithmetic-*.pkl'), 'rb') as file:\n",
    "    sequence_data = pickle.load(file)\n",
    "\n",
    "sequence_data.keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ls: cannot access '../../../storage/artifacts/j4bu146wamlr9': No such file or directory\r\n"
     ]
    }
   ],
   "source": [
    "!ls {model_path}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluate datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_sample=1024"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'DataGeneratorAttention' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-40-c5c6957498bc>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mlstm_eval\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mevaluate_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msequence_data\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'input_texts'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'train'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mtest_sample\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msequence_data\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'target_texts'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'train'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mtest_sample\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m<ipython-input-34-f80ae4141fe3>\u001b[0m in \u001b[0;36mevaluate_model\u001b[0;34m(self, input_texts, output_texts, teacher_forcing, batch_size, n_samples)\u001b[0m\n\u001b[1;32m     38\u001b[0m         }\n\u001b[1;32m     39\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 40\u001b[0;31m         self.data_generator = DataGeneratorAttention(input_texts=input_texts,\n\u001b[0m\u001b[1;32m     41\u001b[0m                                                \u001b[0mtarget_texts\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0moutput_texts\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     42\u001b[0m                                                **data_gen_pars)\n",
      "\u001b[0;31mNameError\u001b[0m: name 'DataGeneratorAttention' is not defined"
     ]
    }
   ],
   "source": [
    "lstm_eval.evaluate_model(sequence_data['input_texts']['train'][:test_sample], sequence_data['target_texts']['train'][:test_sample])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W0823 10:30:20.689115 139973893723904 tf_logging.py:161] <tensorflow.python.keras.layers.recurrent.UnifiedLSTM object at 0x7f4c607527f0>: Note that this layer is not optimized for performance. Please use tf.keras.layers.CuDNNLSTM for better performance on GPU.\n",
      "W0823 10:30:20.692476 139973893723904 tf_logging.py:161] <tensorflow.python.keras.layers.recurrent.UnifiedLSTM object at 0x7f4b03ef76d8>: Note that this layer is not optimized for performance. Please use tf.keras.layers.CuDNNLSTM for better performance on GPU.\n",
      "W0823 10:30:22.002326 139973893723904 tf_logging.py:161] <tensorflow.python.keras.layers.recurrent.UnifiedLSTM object at 0x7f4b039bb7f0>: Note that this layer is not optimized for performance. Please use tf.keras.layers.CuDNNLSTM for better performance on GPU.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "EPOCH 1\n"
     ]
    },
    {
     "ename": "IndexError",
     "evalue": "list index out of range",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mIndexError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-37-257da5bbcdef>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0mlstm_eval\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mLSTMWithAttentionEvaluator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel_path\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'EPOCH'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mepoch\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0mres\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mres_dm\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mevaluate_arithmetics_interpolate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlstm_eval\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput_texts\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget_texts\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m<ipython-input-6-a81e6fa7d862>\u001b[0m in \u001b[0;36mevaluate_arithmetics_interpolate\u001b[0;34m(lstm_eval, input_texts, target_texts, print_res)\u001b[0m\n\u001b[1;32m     20\u001b[0m         \u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmetric\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     21\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m     \u001b[0mplot_two_results\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresults\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresults_deepmind\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexperiments\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'L&L'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'DM'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtitle\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'interpolation'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     24\u001b[0m     \u001b[0;32mreturn\u001b[0m \u001b[0mresults\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresults_deepmind\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-3-e7670148cddb>\u001b[0m in \u001b[0;36mplot_two_results\u001b[0;34m(result_1, result_2, experiments, title)\u001b[0m\n\u001b[1;32m     28\u001b[0m     \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_xticks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     29\u001b[0m     \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_xticklabels\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabels\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrotation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m30\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mha\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"right\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 30\u001b[0;31m     \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlegend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     31\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     32\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/matplotlib/axes/_axes.py\u001b[0m in \u001b[0;36mlegend\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m    421\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mextra_args\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    422\u001b[0m             \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'legend only accepts two non-keyword arguments'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 423\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlegend_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmlegend\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mLegend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhandles\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabels\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    424\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlegend_\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_remove_method\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_remove_legend\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    425\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlegend_\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/matplotlib/legend.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, parent, handles, labels, loc, numpoints, markerscale, markerfirst, scatterpoints, scatteryoffsets, prop, fontsize, borderpad, labelspacing, handlelength, handleheight, handletextpad, borderaxespad, columnspacing, ncol, mode, fancybox, shadow, title, title_fontsize, framealpha, edgecolor, facecolor, bbox_to_anchor, bbox_transform, frameon, handler_map)\u001b[0m\n\u001b[1;32m    554\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    555\u001b[0m         \u001b[0;31m# init with null renderer\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 556\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_init_legend_box\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhandles\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabels\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmarkerfirst\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    557\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    558\u001b[0m         \u001b[0;31m# If shadow is activated use framealpha if not\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/matplotlib/legend.py\u001b[0m in \u001b[0;36m_init_legend_box\u001b[0;34m(self, handles, labels, markerfirst)\u001b[0m\n\u001b[1;32m    813\u001b[0m                 \u001b[0;31m# original artist/handle.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    814\u001b[0m                 handle_list.append(handler.legend_artist(self, orig_handle,\n\u001b[0;32m--> 815\u001b[0;31m                                                          fontsize, handlebox))\n\u001b[0m\u001b[1;32m    816\u001b[0m                 \u001b[0mhandles_and_labels\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhandlebox\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtextbox\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    817\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/matplotlib/legend_handler.py\u001b[0m in \u001b[0;36mlegend_artist\u001b[0;34m(self, legend, orig_handle, fontsize, handlebox)\u001b[0m\n\u001b[1;32m    113\u001b[0m         artists = self.create_artists(legend, orig_handle,\n\u001b[1;32m    114\u001b[0m                                       \u001b[0mxdescent\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mydescent\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheight\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 115\u001b[0;31m                                       fontsize, handlebox.get_transform())\n\u001b[0m\u001b[1;32m    116\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    117\u001b[0m         \u001b[0;31m# create_artists will return a list of artists.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/matplotlib/legend_handler.py\u001b[0m in \u001b[0;36mcreate_artists\u001b[0;34m(self, legend, orig_handle, xdescent, ydescent, width, height, fontsize, trans)\u001b[0m\n\u001b[1;32m    297\u001b[0m         p = self._create_patch(legend, orig_handle,\n\u001b[1;32m    298\u001b[0m                                xdescent, ydescent, width, height, fontsize)\n\u001b[0;32m--> 299\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate_prop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morig_handle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlegend\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    300\u001b[0m         \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrans\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    301\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/matplotlib/legend_handler.py\u001b[0m in \u001b[0;36mupdate_prop\u001b[0;34m(self, legend_handle, orig_handle, legend)\u001b[0m\n\u001b[1;32m     70\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mupdate_prop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlegend_handle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morig_handle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlegend\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     71\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 72\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_update_prop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlegend_handle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morig_handle\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     73\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     74\u001b[0m         \u001b[0mlegend\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_set_artist_props\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlegend_handle\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/matplotlib/legend_handler.py\u001b[0m in \u001b[0;36m_update_prop\u001b[0;34m(self, legend_handle, orig_handle)\u001b[0m\n\u001b[1;32m     63\u001b[0m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_default_update_prop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlegend_handle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morig_handle\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     64\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 65\u001b[0;31m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_update_prop_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlegend_handle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morig_handle\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     66\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     67\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_default_update_prop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlegend_handle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morig_handle\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/matplotlib/legend_handler.py\u001b[0m in \u001b[0;36mupdate_from_first_child\u001b[0;34m(tgt, src)\u001b[0m\n\u001b[1;32m     36\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     37\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mupdate_from_first_child\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtgt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msrc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 38\u001b[0;31m     \u001b[0mtgt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate_from\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msrc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_children\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     39\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     40\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mIndexError\u001b[0m: list index out of range"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for epoch, job_id in job_ids.items():\n",
    "    model_path = Path('../../../../storage/artifacts/'  + job_id)\n",
    "    lstm_eval = LSTMWithAttentionEvaluator(model_path)\n",
    "    print('EPOCH', epoch)\n",
    "    res, res_dm = evaluate_arithmetics_interpolate(lstm_eval, input_texts, target_texts)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "EPOCH 1\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "EPOCH 2\n"
     ]
    },
    {
     "data": {
      "image/png": "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SQH7AwtV9VNVXQ9MAH5Txnl/Am4B1qVSOMdxnGwn25VUS2BJZLso7CshxARspapVE5PEcRzHqTTZrqS2iIjUAm4DLq3EuWeJyCwRmbV8+fLqF85xHCcLyHYltRRoFdnOC/sSNAT2AqaJyGKgF1BQlvOEqt6vqt1VtXuzZs2qUWTHcZzsIduV1EygvYi0EZE6wBCgJBezqn6jqk1VtbWqtgbeBfJVNc1pdx3HcbKDrFZSqroBOB94CZgHTFLVD0XkOhHJT690TjKFhYV07NiRdu3acfPNN292/L777mPvvfema9euHHzwwXz00Uclx2666SbatWtHx44deemll1IptuM420HGT+bdXlT1BeCFpH2jyjm3dypkcjanuLiY4cOHM2XKFPLy8ujRowf5+fl07rxpxsAJJ5zAOeecA0BBQQGXXHIJhYWFfPTRR0yYMIEPP/yQL774gsMOO4z58+eTk5OTruI4jlNJsron5WQOM2bMoF27drRt25Y6deowZMgQJk+eXOqcnXbaqWT9u+++Q0QAmDx5MkOGDKFu3bq0adOGdu3aMWPGjJTK7zjOtpH1PSknM1i6dCmtWm3yccnLy2P69M3nVt9zzz3cdtttrF+/nldffbXk2l69epW6dunSpZtd6zhO/PCelFOjGD58OJ988gm33HIL119/fbrFcRxnO3El5WQELVu2ZMmSTfOui4qKaNmyZbnnDxkyhGeffXabrnUcJz64knIygh49erBgwQIWLVrE+vXrmTBhAvn5pR0wFyxYULL+r3/9i/bt2wOQn5/PhAkT+PHHH1m0aBELFixg//33T6n8juNsG66kYkRFLta33XYbnTt3Zp999qFPnz589tlnJcc+//xzDj/8cDp16kTnzp1ZvHpjKkWvdnJzc7n77rvp168fnTp1YvDgwXTp0oVRo0ZRUGBT2+6++266dOlC165due222xg3bhwAXbp0YfDgwXTu3JkjjjiCe+65xz37HCdDkE15Ap2qonv37jpr1tbN9y0uLqZDhw6lXKzHjx9fysX6tddeo2fPnjRo0IB7772XadOmMXHiRAB69+7NVVddRd++fVm7di21bmpBg9pSNQUa7UmOnSxmdKMqus/2fUetR1ZN+NDF9U6okvsA21UmEZmtqhWmPvKeVEyojIv1IYccQoMGDQDo1asXRUVFAHz00Uds2LCBvn37ArDjjjtWnYJyHMdJI66kYkJZLtZbcpN+6KGHOPLIIwGYP38+O++8M7/97W/p1q0bl19+OcUbvYfsOE7m4/OkMpDHHnuMWbNm8frrrwOwYcMG3nzzTd577z123313jjvuOMb+9BNn7FsnzZI6juNsH66kYkJl3aSnTp3KDTfcwOuvv07dunUB63V17dqVtm3bAnDMMcfw7p3PcUZqRE8dMRkbqGkUFhZy4YUXUlxczLBhwxg5cmSp47fddhsPPvggubm5NGvWjIcffpg99tiDOXPmcO6557JmzRpycnK46qqraNSo0Tbd67PPPmPgwIFs3LiRn376iQsuuKAkxJWT3biSiglRF+uWLVsyYcIEnnjiiVLnvPfee5x99tkUFhbSvHnzUteuXr2a5cuX06xZM1599VW6N3PvNadiKhMTsVu3bsyaNavEYeeKK65g4sSJNGjQgEcffZT27dvzxRdfsN9++1G3bl1effXVrb7XbrvtxjvvvEPdunVZu3Yte+21F/n5+bRo0SIdP4sTI3xMKiZUxsX68ssvZ+3atRx77LF07dq1ZJ5QTk4Ot956K3369GHvvfdGVTlzv9rpLI6TIWyPw06HDh1K5qK1aNGCHXfckby8vG26V506dUosAz/++CMbN9asKRTOtuM9qRjRv39/+vfvX2rfddddV7I+derUcq/t27cvc+fO3bRj9D+rXD6n5lHZmIgJog47UWbMmMEPP/xAx44dt/leS5YsYcCAASxcuJAxY8Z4L8oBvCflVDPbM0F53LhxtG/fnvbt25dMzHXSR8Jh5/LLLy+1f9myZZx88smcd955JZHnt+VerVq1Yu7cuSxcuJBx48bx5ZdfVqn8TmbiSsqpNhLjHS+++CIfffQR48ePL5WIEDaNUcydO5dBgwZxxRVXAPD1119z7bXXMn36dGbMmMG1117Lqh/crb6q2VqHnYKCghKzHMCaNWsYMGAAN9xwA4cccsh23StBixYt2GuvvXjzzTe3t3hODcCVlFNtbM94x0svvUTfvn1p3Lgxu+yyC3379qVw4YaUl6GmU5mYiAmHnYKCglIOO+vXr2fgwIGccsopDBo0aLvuVVRUxA8//ADAqlWreOutt0qZDp3sxcekYkbVhT6pkttsF9sz3lHm5OZFPphe1UQddoqLixk6dGiJw0737t3Jz88v5bADsPvuu1NQUMCk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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "EPOCH 3\n"
     ]
    },
    {
     "data": {
      "image/png": "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gyAI6g/1XUm9BHSR1FFSY2AEMD6308w+NbPNzKyDmXUA/g0MMbPJhRE3CIKgflGvlZSZLQFOAh4BpgH3mNnrki6SNKSw0gUVmTBhAt26daNz585cfvnlK+2/6aab6NWrF71792b33XfnjTfeKN932WWX0blzZ7p168YjjzyST7GDIFgPav1g3vXFzB4GHq6w7YIqju2fD5mClVm6dCknnngijz32GKWlpfTt25chQ4bQo8fyEQOHHnooJ5xwAgDjx4/n9NNPZ8KECbzxxhuMGzeO119/nffee4999tmH6dOnU1JSUqjiBEGwhtRrS6rYWJ2lcPXVV9OjRw+23XZb9t57b955553yfWeffTY9e/ake/fu/OxnP2N5hqi6waRJk+jcuTOdOnWicePGjBgxggcffHCFYzbaaKPy5S+++AJJADz44IOMGDGCJk2a0LFjRzp37sykSZPyKn8QBOtGKKkiIWcp/POf/+SNN95g7NixK7irALbffnsmT57M1KlTGTZsGGeffTYAL7zwAs8//zxTp07ltdde46WXXuLpd5YWohg1xty5c2nffnmMS2lpKXPnzl3puBtuuIGtt96as88+m+uuu26tzg2CoPgIJVUkrImlsOeee9K8eXMA+vXrR1lZGQCSWLRoEYsXL+brr7/mm2++YfMNlPcyFAMnnngib731FldccQUXX3xxocUJgmA9CSVVJKxta//2229n0KBBAOyyyy7sueeetG3blrZt2zJw4EC6ty6O/pZ1dWE++eST9O7du/x32GGH8fLLL5efV1ZWRrt27Va6Xo4RI0bwwAMPANCuXTvmzFk+Znt15wZBUDyEkqqF3HnnnUyePJmzzjoLgJkzZzJt2jTKysqYO3cuTzzxBM++s6TAUq6fC3PPPfdkypQpTJkyhSeeeIINNtiABQsWMGvWLBYvXsy4ceMYMmTFAMwZM2aUL//jH/+gS5cuAAwZMoRx48bx9ddfM2vWLGbMmMFOO+1Uw6UPgqA6CCVVJKxpa//xxx/nkksuYfz48TRp0gSAv/3tb/Tr148NN9yQDTfckEGDBvFiWeH7pNbHhZnlvvvuY9CgQfzhD39wK7F7d4YPH07Pnj254IILGD/eh7Zdf/319OzZk969e3P11VczZswYAHr27Mnw4cPp0aMH++67LzfccENE9mVYn4CdkpKScmu3YqMhCKqDeh+CXiz07duXGTNmMGvWLNq1a8e4ceO46667VjjmlVde4fjjj2fChAm0adOmfPuWW27JrbfeynnnnYeZ8fTTT3Nqm8K3PypzYU6cWHUi+awLM8u4ceM4/fTT2W+//dhvv/1W2HfRRReVL1977bVVXvv888/n/PPPXxvx6wVrEtqfs3abN2/OjTfeyNlnn83dd98NQLNmzZgyZUqhxA/qAYWvyQIAGjZsyPXXX79KS+Gss85i4cKFHHTQQSu0XIcNG8bWW29Nr1692G677dhuu+04oFujQhZnranowswxb948Xn31VQYOHFggyeo21WXtBkFNEZZUEbE6S+Hxxx+v9LySkhJuvvnmFTeOur3a5Vtb1taF+fTTT5e7MHPcc889DB06lEaNapfSrS2sr7W7aNEi+vTpQ8OGDTn33HM58MADa1TeoP4RSiqoMdbHhZlj7NixXHbZZfkSOVgFOWv36aefLt/2zjvv0K5dO95++2322msvevXqxdZbb11AKYO6RiipoMbIujCXLl3KyJEjy12Yffr0YciQISu4MMH713LuzdmzZzNnzhz22GMPv+CojatHsFGfVs916gDra+3mju3UqRP9+/fnjjvu4L777mPp0qUcc8wxnHvuuStc5+qrr+a2226jYcOGtG7dmjvuuIOtttqKd955h6FDh7Js2TK++eYbTj755PIUV0H9JpRUUKOsqwsToEOHDpEZooZZH2t3wYIFNG/enCZNmvDRRx/x/PPPs2jRIp5++um1DsJo27YtL774Ik2aNGHhwoVss802DBkyhC222CJv9yIoTiJwIgjqMesTsDNt2jT69OnDdtttx5577slBBx1Ejx491ikIo3HjxuUW2tdff82yZcvydQuCIicsqSKjw7nVM0v97KbVcpmgHrCu1u6uu+7Kq6++Wr5+33338cEHH5Svr20Qxpw5cxg8eDAzZ87kyiuvDCsqAMKSCoKgAFQ25KB9+/ZMnTqVmTNnMmbMGN5///0CShgUC2FJBTVKdVmGENZhsVMdQw4AtthiC7bZZhueffZZhg0bVqMyB8VPWFJBEFQL2SCMqvIr5oIwxo8fv0IQRllZGV999RXgARnPPfcc3bp1y6v8QXESllQQBNXC+gw5mDZtGmeccQaSMDPOPPNMevXqVeASBcVAKKkgCKovYOfywesUhDFgwACmTp1aLTIEdYtQ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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for epoch, job_id in job_ids.items():\n",
    "    model_path = Path('../../../storage/artifacts/'  + job_id)\n",
    "    lstm_eval = LSTM_Evaluator(model_path)\n",
    "    print('EPOCH', epoch)\n",
    "    res, res_dm = evaluate_arithmetics_extrapolate(lstm_eval, input_texts, target_texts)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## We can also test an indiviual string:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'-4'"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lstm_eval.predict_on_string('1 / 7')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "''"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lstm_eval.predict_on_string('2*2')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
